home *** CD-ROM | disk | FTP | other *** search
/ Spanish Scene 1 / SpanishScene1.iso / spanish pack n°1 by llfb / revistas / fanzine / fanzine01.dms / fanzine01.adf / 39 < prev    next >
Text File  |  1977-12-31  |  10KB  |  299 lines

  1.  
  2.  
  3.   C U R S O   D E   C 
  4.  
  5.   Y   M A N E J O   D E L   L A T T I C E - C   C O M P I L E R
  6.  
  7.   ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  8.  
  9.  
  10.  
  11.    (c) Warlord, Abril 1992
  12.  
  13.    En esta sección daré un breve curso de C, para una vez finalizado éste,
  14.   comentar a fondo el Lattice C compiler. Como digo,no entraré demasiado en
  15.   profundidades sobre el lenguaje C. No seguiré el guión de ningún libro, pero
  16.   cualquiera que consultéis vendrá mas o menos como yo lo explico. Os
  17.   recomiendo el de Anaya de Turbo C.
  18.  
  19.    Tampoco voy a hacer un artículo introductorio diciendo eso de que el C es
  20.   muy bonito y útil y todo eso que se suele decir. Iré directamente al grano.
  21.    De todos modos si queréis enteraros un poco de esto, os remito a cualquier
  22.   buen libro de C, o sin ir más lejos al primer número de la AMIGA ZETA.
  23.  
  24.  
  25.   LENGUAJE C:
  26.   ----------
  27.  
  28.    Tipos de caracteres:
  29.  
  30.    Entero decimal.Se representa por %d
  31.    Caracter.Representado por %c
  32.    Tira de caracteres.Se representa por %s
  33.    Numero en punto flotante,con notación exponencial.Se representa por %e
  34.      ""      ""      ""        ""        decimal.Se denota por %f
  35.    %g significa que usará cualquiera de los dos anteriores.El que sea más
  36.    corto.
  37.    %u Entero decimal sin signo
  38.    %o Entero octal sin signo.
  39.    %x entero hexadecinal sin signo.
  40.  
  41.    Códigos de control:
  42.  
  43.    \n ............ nueva línea
  44.    \t ............ tabulado
  45.    \b ............ retroceso
  46.    \r ............ retorno de carro
  47.    \f ............ salto de página
  48.    \\ ............ barra atrás (ie,\)
  49.    \' ............ apóstrofe (ie,')
  50.    \" ............ comillas (ie,")
  51.  
  52.    ¡Ostia!, ¡Que rollo!.
  53.  
  54.    Veamos un pequeño ejemplo:
  55.  
  56.    main ()
  57.    {
  58.    printf("Hola.Me llamo %s tengo %d años y vivo en %s\n",JMC,22,CADIZ);
  59.    printf("Esta es laa\b segunda linea");
  60.    printf("Esta no es la tercera porque no puse \\n \n");   
  61.    printf("Esta si es la tercera, porque puse \\n");
  62.    }
  63.  
  64.   salida:
  65.  
  66.         Hola. Me llamo JMC tengo 22 años y vivo en Cadiz
  67.         Esta es la segunda lineaEsta no es la tercera porque no puse \n
  68.         Esta si es la tercera, porque puse \n
  69.  
  70.   Como veréis,para imprimir los distintos datos hemos utilizado los formatos
  71.   anteriores: %d para escribir un número entero (22) y %s para pintar dos ca-
  72.   denas de caracteres (JMC y Cadiz).
  73.  
  74.     En este ejemplo, podemos observar:
  75.  
  76.     main() = Significa que es el bloque principal del programa (y en este
  77.   caso el único)
  78.     {,} = Se colocan al empezar un bloque, un bucle,...
  79.     ; Se coloca al final de cada instrucción.
  80.     printf = Esta orden es la utilizada para inprimir un mensaje en
  81.   panatalla.(más adelante veremos ésta y otra más).
  82.     Hemos utilizado \b para borrar un carácter
  83.     Hemos utilizado \\n para que escriba "\n" y no lo interprete como el
  84.   final de la línea. Desde luego,podíamos tambien haber escrito:
  85.  
  86.     printf("primera línea \n segunda línea \n tercera línea\n")
  87.  
  88.   Lo que simplificaría bastante lo anterior
  89.  
  90.   DATOS EN C:
  91.   ----------
  92.  
  93.    Anteriormente hemos visto algunos tipos de datos:Enteros,decimales, ...
  94.   y cómo son representados.Vamos a explicar ahora esto con algo más de deta-
  95.   lle:
  96.  
  97.   ENTEROS:
  98.  
  99.   Son todos los números sin coma decimal: -1, -23, 4, 0 ....
  100.   Las variables que vayan a contener a enteros se definen como INT.
  101.   Por ejemplo, INT A; significaría que A sólo va a contener a variables en-
  102.   teras.Sin embargo, es corriente que necesitemos enteros más grandes o más
  103.   pequeños que el rango que nuestros 16 bits nos permiten:
  104.  
  105.   short a; es un entero de tan sólo 8 bits 
  106.   long a; entero de 32 bits
  107.  
  108.   es decir:
  109.  
  110.   int a; es un entero de -32768 a +32767
  111.   short a; entero de -128 a +127
  112.   long a; entero de -2147483648 a +2147483647
  113.  
  114.    Si nos fijamos,todas estas variables enteras admiten recorrido negativo.Si
  115.   ésto no nos interesara, porque la variable nunca fuera negativa se utiliza
  116.   lo mismo pero poniendole delante "unsigned", como: unsigned short a.Con es-
  117.   to conseguimos que en vez de -128 a +127,sea de 0 a 255,
  118.  
  119.   CONSTANTES EN PUNTO FLOTANTE:
  120.  
  121.    Se utilizan para números muy grandes o muy pequeños. Su utilidad es mani-
  122.   fiesta en el ahorro de memoria. Se precisa de muchos bytes si queremos al-
  123.   macenar una gran cadena de números. Sin embargo, en punto (o coma) flotan-
  124.   te, la necesidad de memoria es mínima. Se representan por
  125.   la mantisa y el exponente, así: -1.5 x E+6, que significa:
  126.                                           \|/
  127.                            -1.5 x 1000000 (6 ceros)
  128.   Se declaran como float. (p.e., float a;)
  129.  
  130.    Para mayor precisión, se utiliza double (o long float) que reservan el do-
  131.   ble de bytes (64!)
  132.  
  133.   CARACTERES:
  134.  
  135.    Cualquier letra o número puede ser un caracter (a,#,3,N,...) se declaran
  136.   como "char".Ocupan 8 bits.
  137.  
  138.   Todo esto es muy bonito, pero.... dame un ejemplo ....
  139.  
  140.   Pues bien, ahí vá:
  141.  
  142.   main()
  143.   {
  144.      char a;
  145.      short b;
  146.      float c;
  147.  
  148.     a='H';
  149.     b=1000;
  150.     c=3.2e-4;
  151.    }
  152.  
  153.    ¿Creen que está bien?.... ¡No!, se ha asignado b=1000,pero b es del tipo 
  154.   short, por lo tanto sus valores no pueden pasar de 255. Por lo tanto,o se
  155.   pone b=255, o bien se cambia "short b" por "int b".
  156.  
  157.    Supongamos ahora que queremos representar una cadena de caracteres, como
  158.   por ejemplo, un nombre. ¿Cómo podemos hacer esto, con lo visto hasta aho-
  159.   ra?. Evidentemente, como muchos de ustedes ya han pensado, se vuelve a
  160.   recurrir a la expresión "char". Si queremos asignar una cadena de caracte-
  161.   res como por ejemplo, "Mi mamá me mima" a una variable, bastará hacer ...
  162.  
  163.   main()
  164.   {
  165.    char frase[15];porque tiene 15 letras o caracteres
  166.    ....
  167.    frase="mi mamá me mima";/*¡ojo!: '' para caracteres, "" para frases.*/
  168.  
  169.   De ahora en adelante, llamaremos 'string' a una cadena de caracteres.
  170.  
  171.   /* Programa chorra 1*/
  172.   #define REVISTA "Fanzine"
  173.   main()
  174.    {
  175.    char nombre[10];
  176.    printf("Amigamaniacoadicto, dime tu nombre... ");
  177.    scanf("%s",nombre);
  178.    printf("Hola, %s, ¿Quieres colaborar en $s\n",nombre,REVISTA);
  179.    }
  180.    Aquí hay varias cosas nuevas:
  181.  
  182.   * Un comentario . Va entre */ y se cierra con */. ¡Nunca equivocarse de
  183.   orden, os traería funestas consecuencias. Este comentario puede colocar-
  184.   se en cualquier lugar del programa.
  185.  
  186.   * El comando define. Lo que hace, es que al ponerlo antes del main(),
  187.   asignamos a la variable REVISTA la cadena "fanzine" (que REVISTA, esté
  188.   en mayúsculas no es casual. Este tipo de variables se suelen y se deben
  189.   poner en mayúsculas). Más adelante volveremos sobre este comando.
  190.  
  191.   Todo esto está muy bien... ¿pero cómo puedo hacer un programa?
  192.                                    ----------------------------
  193.  
  194.   Explicar el funcionamiento del Lattice C, es harto difícil. Pero ahí va
  195.   una pequeña muestra para que podáis compilar y ejecutar un programa:
  196.  
  197.   1.Instalar el Lattice C. Es fácil, basta con que leas el read.me que se
  198.   encuentra en el primer disquette del Lattice C
  199.  
  200.   1. Mediante un editor escribe el programa. Se recomienda el Cygnus (CED),
  201.   Es conveniente instalar el CED en el directorio C del disco 1.
  202.  
  203.   2.Una vez escrito, grabarlo a RAM: o a otro disco. Llamémosle Estupidez1.c
  204.  
  205.   3.Vete a la RAM (CD RAM:)
  206.  
  207.   4.Escribe:  lc -L Estupidez1 (si está en RAM, si no, sería  df0:Est...)
  208.     Ojo:
  209.         -L (L mayúscula)
  210.         El nombre debe ir seguido de .c
  211.  
  212.   5.Si lo has hecho bien, el programa será compilado y linkado (su significa-
  213.   do para otra lección). Observaréis que en RAM han aparecido nuevos ficheros
  214.   con distintas extensiones. Para ejecutar nuestro primer programa basta con
  215.   escribir estupidez1 y ... ¡Ohhhhh!
  216.  
  217.   Si no tenéis editor, podéis hacerlo con el LSE (Lattice Screen Editor). Es
  218.   un editor que incluye el propio Lattice C, pero que te permite otras muchas
  219.   opciones (compilar...). Su manejo, debe ser explicado en otra ocasión. Por
  220.   ahora, basta saber que se carga escribiendo lse. Escribir el programa y
  221.   salvarlo a Ram, siguiendo los anteriores pasos.
  222.  
  223.   COMANDOS BASICOS DEL C:
  224.   ----------------------
  225.  
  226.   * PRINTF 
  227.  
  228.    Ya hemos visto como vá. Su formato es:
  229.   
  230.    printf(" <frase+códigos>",variables);
  231.   
  232.   ejemplo:
  233.  
  234.   ....
  235.   ordenata="amiga";
  236.   ....
  237.   printf("¡Hola!, yo tengo un %s \n",ordenata);
  238.  
  239.   * SCANF
  240.  
  241.   También hemos visto un ejemplo anteriormente. Se utiliza para leer datos
  242.   desde un dispositivo (entiéndase teclado, disco...). Su formato es muy simi-
  243.   lar al de printf. Un ejemplo:
  244.                                 scanf("%s",nombre);
  245.   otro más:           
  246.                                 scanf("Dame tu nombre %s",nombre);
  247.  
  248.   ¡Ooops!, ¡Un momento!, esto no es correcto. Esta función no admite esto.
  249.   Lo correcto sería:
  250.                                 printf("Dame tu nombre\n");
  251.                                 scanf("%s",nombre);
  252.   Otro ejemplo más:      
  253.                                 printf("Dime tu edad");
  254.                                 scanf ("%s",&edad);
  255.  
  256.   ¡Espera un momento!, ¿qué es el &?
  257.   Bueno, este ejemplo nos lleva a un concepto FUNDAMENTAL. El de PUNTEROS.
  258.  
  259.   PUNTEROS "POR UN TUBO":
  260.   ----------------------
  261.  
  262.    Entender el concepto de puntero es fundamental en C y en cualquier lenguaje
  263.   de bajo nivel.
  264.  
  265.    Cuando definimos ... int edad; ,estamos diciendo que la variable "edad"
  266.   va a ser un entero. Si asignamos edad=23, este número se guarda en una
  267.   determinada posición de memoria, por ejemplo en la posición 4444.
  268.   Entonces:
  269.  
  270.   edad=22
  271.   &edad=4444
  272.  
  273.   ¿Está claro?. &variable nos dá la dirección real de memoria donde se
  274.   encuentra la variable. Se dirá que &edad es una CONSTANTE PUNTERO.
  275.  
  276.   ¡Ok!, ¡ya me enterado!, pero ... ¿y si tenemos lo contrario?. Veamos:
  277.  
  278.   memoria =&edad; /*(Ahora memoria=4444)*/
  279.  
  280.   ¿Qué sucede si queremos conocer el contenido de memoria?. Esto nos lleva
  281.   al operador de indirección "*". Un ejemplo:
  282.  
  283.   edad = 22;
  284.   memoria = &edad; /*ahora memoria=4444*/
  285.   años = *memoria; /*ahora años=23*/
  286.  
  287.    Como podemos observar, el operador "*" hace lo conntrario que &. Nos
  288.   dá el valor contenido en la dirección de memoria apuntada por memoria.
  289.  
  290.   ¡Cuidado!. El manejo de punteros suele crear verdaderos quebraderos de
  291.   cabeza. Si por error pusiésemos años = *edad, ¿qué pasaría?. Como edad
  292.   vale 22, ahora años sería el valor que se encontrara almacenado en la
  293.   dirección 22 y nó en la 4444.
  294.    
  295.   Bueno colegas AmigaCmaniacoadictos, creo que ya he escrito suficiente por 
  296.   esta vez. Pero no lo olvidéis, en el próximo .... MAS.
  297.  
  298.  
  299.